/**
 * @Author: 抱著羊啃 1437670973@qq.com
 * @Date: 2025-05-20
 * @Description: 书库页面功能，负责请求API获取小说数据并渲染到页面
 */

// 全局变量，用于存储筛选条件
let currentFilters = {
    category: 'all',
    status: 'all',
    sort: 'new',
    wordCountRange: 'all', // 新增字数范围筛选条件
    pageNum: 1,
    pageSize: 18,  // 修改为18个每页
    novelName: ''
};

// 在页面加载完成后执行
$(document).ready(function() {
    // 初始化加载小说数据
    fetchNovels();
    // 初始化加载分类数据
    fetchCategories(); // 新增调用

    // 绑定分类标签点击事件
    // 注意：由于分类标签是动态生成的，需要使用事件委托的方式绑定事件
    $(document).on('click', '.category-tag[data-category]', function() {
        $('.category-tag[data-category]').removeClass('active');
        $(this).addClass('active');
        currentFilters.category = $(this).data('category');
        currentFilters.pageNum = 1; // 重置页码
        fetchNovels();
    });
    
    // 绑定状态标签点击事件
    $('.category-tag[data-status]').on('click', function() {
        $('.category-tag[data-status]').removeClass('active');
        $(this).addClass('active');
        currentFilters.status = $(this).data('status');
        currentFilters.pageNum = 1; // 重置页码
        fetchNovels();
    });
    
    // 绑定排序标签点击事件
    $('.category-tag[data-sort]').on('click', function() {
        $('.category-tag[data-sort]').removeClass('active');
        $(this).addClass('active');
        currentFilters.sort = $(this).data('sort');
        currentFilters.pageNum = 1; // 重置页码
        fetchNovels();
    });
    
    // 绑定字数标签点击事件
    $('.category-tag[data-word-count]').on('click', function() {
        $('.category-tag[data-word-count]').removeClass('active');
        $(this).addClass('active');
        currentFilters.wordCountRange = $(this).data('word-count');
        currentFilters.pageNum = 1; // 重置页码
        fetchNovels();
    });
    
    // 绑定搜索表单提交事件
    $('#searchForm').on('submit', function(e) {
        e.preventDefault();
        currentFilters.novelName = $('#searchInput').val().trim();
        currentFilters.pageNum = 1; // 重置页码
        fetchNovels();
    });
    
    // 绑定加载更多按钮点击事件
    $('#loadMoreBtn').on('click', function() {
        currentFilters.pageNum++; // 增加页码
        fetchNovels(true); // 传入true表示追加模式
    });
});

/**
 * 获取并渲染分类数据
 */
function fetchCategories() {
    $.ajax({
        url: '/demo1_war_exploded/API/Category', // 确保这个URL是正确的
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            if (data.code === 200 && data.rows) {
                renderCategories(data.rows);
            }
        },
        error: function(xhr, status, error) {
            console.error('获取分类数据失败:', error);
        }
    });
}

/**
 * 渲染分类标签
 * @param {Array} categories - 分类数据数组
 */
function renderCategories(categories) {
    const categoryContainer = $('#category-filter-container');
    categoryContainer.empty();

    // 添加"全部"标签（一级分类）
    const allParentTag = $('<span class="category-tag active" data-category="all">全部</span>');
    categoryContainer.append(allParentTag);
    allParentTag.on('click', () => {
        $('#subcategory-container').hide(); // 隐藏子类容器
        currentFilters.category = 'all';
        currentFilters.pageNum = 1;
        fetchNovels();
    });

    // 渲染一级分类（parent_id为null）
    categories.filter(c => c.parent_id === null).forEach(parentCategory => {
        const parentTag = $('<span class="category-tag" data-category="' + parentCategory.category_id + '">' + parentCategory.category_name + '</span>');
        categoryContainer.append(parentTag);
    
        // 父分类点击事件：展示子类（关键修改：将 === 改为 == 解决类型不匹配）
        parentTag.on('click', () => {
            $('.category-tag[data-category]').removeClass('active');
            parentTag.addClass('active');
            currentFilters.pageNum = 1;
            
            // 筛选当前父类的子类（修改为宽松相等）
            const subcategories = categories.filter(sub => sub.parent_id == parentCategory.category_id); // 关键修改点
            renderSubcategories(subcategories); // 渲染子类
            $('#subcategory-container').show(); // 显示子类容器
        });
    });
}

/**
 * 获取小说数据
 * @param {boolean} append - 是否追加模式，默认为false（替换模式）
 */
function fetchNovels(append = false) {
    // 构建请求参数
    let params = {
        pageNum: currentFilters.pageNum,
        pageSize: currentFilters.pageSize,
        orderDirection: 'DESC' // 默认降序排序
    };
    
    // 添加小说名称搜索条件
    if (currentFilters.novelName) {
        params.novel_name = currentFilters.novelName;
    }
    
    // 添加分类条件
    if (currentFilters.category !== 'all') {
        params.category = currentFilters.category;
    }
    
    // 添加状态条件
    if (currentFilters.status !== 'all') {
        params.status = currentFilters.status;  // 传递status参数
    }
    
    // 添加字数范围条件
    if (currentFilters.wordCountRange !== 'all') {
        params.wordCountRange = currentFilters.wordCountRange;
    }
    
    // 添加排序条件
    switch (currentFilters.sort) {
        case 'new':
            params.orderBy = 'create_time';
            break;
        case 'hot':
            params.orderBy = 'view_count';
            break;
        case 'recommend':
            params.orderBy = 'recommend_count';
            break;
        case 'collect':
            params.orderBy = 'collect_count';
            break;
    }
    
    // 显示加载状态
    if (!append) {
        $('#novels-container').html('<div class="col-12 text-center py-5"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div></div>');
    } else {
        $('#loadMoreBtn').html('<span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>加载中...');
        $('#loadMoreBtn').prop('disabled', true);
    }
    
    // 使用jQuery AJAX发起请求
    $.ajax({
        url: '/demo1_war_exploded/API/Novel',
        type: 'GET',
        data: params,
        dataType: 'json',
        success: function(data) {
            if (data.code === 200) {
                // 渲染小说列表
                renderNovels(data.rows, append);
                
                // 渲染分页
                renderPagination(data.total, currentFilters.pageNum, currentFilters.pageSize);
                
                // 如果没有更多数据，禁用加载更多按钮
                if (currentFilters.pageNum * currentFilters.pageSize >= data.total) {
                    $('#loadMoreBtn').html('没有更多数据了');
                    $('#loadMoreBtn').prop('disabled', true);
                } else {
                    $('#loadMoreBtn').html('<i class="bi bi-arrow-down-circle me-2"></i>加载更多');
                    $('#loadMoreBtn').prop('disabled', false);
                }
            } else {
                console.error('获取小说数据失败:', data.msg);
                showError('获取小说数据失败: ' + data.msg);
            }
        },
        error: function(xhr, status, error) {
            console.error('请求出错:', error);
            showError('请求出错: ' + (xhr.responseJSON ? xhr.responseJSON.msg : error));
        }
    });
}

/**
 * 渲染小说列表
 * @param {Array} novels - 小说数据数组
 * @param {boolean} append - 是否追加模式，默认为false（替换模式）
 */
function renderNovels(novels, append = false) {
    // 如果不是追加模式，清空容器
    if (!append) {
        $('#novels-container').empty();
    }
    
    // 如果没有小说数据
    if (!novels || novels.length === 0) {
        if (!append) {
            $('#novels-container').html('<div class="col-12 text-center py-5"><h3>暂无小说数据</h3></div>');
        }
        return;
    }
    
    // 遍历小说数据，创建卡片
    $.each(novels, function(index, novel) {
        // 创建列容器
        const colContainer = $('<div>').addClass('col mb-3');
        
        // 构建卡片HTML
        const card = $('<div>').addClass('card novel-card h-100 shadow-sm border-0');
        
        // 处理简介文本，限制长度
        const introduction = novel.introduction || '暂无简介';
        const shortIntro = introduction.length > 50 ? introduction.substring(0, 50) + '...' : introduction;
        
        // 卡片内容 - 水平布局
        card.html(`
            <div class="card-body p-3">
                <div class="d-flex">
                    <div class="novel-cover me-3">
                        <img src="${novel.cover_url || 'https://mysteriouslamb.oss-cn-hangzhou.aliyuncs.com/icon.jpg'}" 
                             alt="${novel.novel_name}" 
                             class="img-fluid rounded shadow-sm" style="width: 80px; height: 120px; object-fit: cover;">
                    </div>
                    <div class="novel-info">
                        <h6 class="novel-title">${novel.novel_name}</h6>
                        <div class="author-name mb-1">${novel.username || '未知'}</div>
                        <div class="novel-introduction mb-1">${shortIntro}</div>
                        <div class="novel-tags">
                            <span class="novel-tag small py-0 px-1">热门</span>
                            <span class="novel-tag small py-0 px-1">${novel.update_status === 1 ? '完结' : '连载'}</span>
                            <span class="novel-tag small py-0 px-1">${getCategoryName(novel.category)}</span>
                        </div>
                    </div>
                </div>
            </div>
            <a href="#" class="stretched-link" data-novel-id="${novel.novel_id}"></a>
        `);
        
        colContainer.append(card);
        $('#novels-container').append(colContainer);
    });
    
    // 添加点击事件
    $('[data-novel-id]').on('click', function(e) {
        e.preventDefault();
        const novelId = $(this).data('novel-id');
        // 修改为在新窗口打开小说详情页
        window.open(`/demo1_war_exploded/MainPage/functionPage/page.jsp?id=${novelId}`, '_blank');
    });
}

/**
 * 渲染分页
 * @param {number} total - 总记录数
 * @param {number} currentPage - 当前页码
 * @param {number} pageSize - 每页数量
 */
function renderPagination(total, currentPage, pageSize) {
    const totalPages = Math.ceil(total / pageSize);
    
    // 如果只有一页，不显示分页
    if (totalPages <= 1) {
        $('#pagination-container').empty();
        return;
    }
    
    // 创建分页HTML
    let paginationHTML = `
        <nav aria-label="小说分页">
            <ul class="pagination">
                <li class="page-item ${currentPage === 1 ? 'disabled' : ''}">
                    <a class="page-link" href="#" data-page="${currentPage - 1}" aria-label="上一页">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
    `;
    
    // 计算显示的页码范围
    let startPage = Math.max(1, currentPage - 2);
    let endPage = Math.min(totalPages, startPage + 4);
    
    // 如果页码范围不足5页，调整起始页
    if (endPage - startPage < 4) {
        startPage = Math.max(1, endPage - 4);
    }
    
    // 添加页码
    for (let i = startPage; i <= endPage; i++) {
        paginationHTML += `
            <li class="page-item ${i === currentPage ? 'active' : ''}">
                <a class="page-link" href="#" data-page="${i}">${i}</a>
            </li>
        `;
    }
    
    // 添加下一页按钮
    paginationHTML += `
                <li class="page-item ${currentPage === totalPages ? 'disabled' : ''}">
                    <a class="page-link" href="#" data-page="${currentPage + 1}" aria-label="下一页">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </ul>
        </nav>
    `;
    
    // 设置分页HTML
    $('#pagination-container').html(paginationHTML);
    
    // 添加分页点击事件
    $('.page-link').on('click', function(e) {
        e.preventDefault();
        if (!$(this).parent().hasClass('disabled')) {
            const page = parseInt($(this).data('page'));
            currentFilters.pageNum = page;
            fetchNovels();
            // 滚动到页面顶部
            $('html, body').animate({ scrollTop: 0 }, 'slow');
        }
    });
}

/**
 * 根据分类代码获取分类名称
 * @param {string} categoryCode - 分类代码
 * @returns {string} - 分类名称
 */
function getCategoryName(categoryCode) {
    const categoryMap = {
        'xuanhuan': '玄幻',
        'qihuan': '奇幻',
        'wuxia': '武侠',
        'xianxia': '仙侠',
        'kehuan': '科幻',
        'dushi': '都市',
        'lishi': '历史',
        'junshi': '军事',
        'youxi': '游戏',
        'tiyu': '体育'
    };
    
    return categoryMap[categoryCode] || '其他';
}

/**
 * 显示错误提示
 * @param {string} message - 错误信息
 */
function showError(message) {
    // 创建错误提示
    const errorDiv = $('<div>')
        .addClass('alert alert-danger mt-3')
        .attr('role', 'alert')
        .text(message);
    
    // 添加到容器顶部
    $('.container').prepend(errorDiv);
    
    // 5秒后自动消失
    setTimeout(function() {
        errorDiv.fadeOut('slow', function() {
            $(this).remove();
        });
    }, 5000);
}

function renderSubcategories(subcategories) {
    const subcategoryContainer = $('#subcategory-filter-container');
    subcategoryContainer.empty();

    // 渲染具体子类（移除"全部子类"标签）
    subcategories.forEach(sub => {
        const subTag = $('<span class="category-tag" data-category="' + sub.category_id + '">' + sub.category_name + '</span>');
        subcategoryContainer.append(subTag);
        subTag.on('click', () => {
            $('.category-tag[data-category]').removeClass('active');
            subTag.addClass('active');
            currentFilters.category = sub.category_id;
            currentFilters.pageNum = 1;
            fetchNovels();
        });
    });
}